package com.ssb.admin.modules.sys.user.entity;

import com.baomidou.mybatisplus.annotations.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ssb.admin.modules.sys.role.entity.SysRole;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 
 * </p>
 *
 * @author duaichao
 * @since 2018-08-23
 */
@Data
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SysUser implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;
    /**
     * 登录名

     */
    private String loginName;
    /**
     * 密码
     * sql不查询密码或置为null值，配合 @JsonInclude 排除密码输出前台
     */
    private String password;
    /**
     * 密码加密盐
     */
    @JsonIgnore
    private String salt;
    /**
     * 用户类型
     */
    private Integer userType;
    /**
     * 用户姓名
     */
    private String userName;
    /**
     * 性别
     */
    private Integer sex;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 手机号
     */
    private String phone;
    /**
     * 用户状态 默认0 1锁定
     */
    private Integer status;
    /**
     * 机构ID
     */
    private Long organizationId;
    /**
     * 创建时间
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date createTime;
    /**
     * 最后登录时间
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date loginTime;
    /**
     * 最后更新时间
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date updateTime;
    /**
     * 用户头像
     */
    private String avatar;

    /**
     * 非表字段
     * 角色对象
     */
    @TableField(exist = false)
    private SysRole role;
    @TableField(exist = false)
    private Long roleId;
    /**
     * 验证码
     */
    @TableField(exist = false)
    private String captcha;
    /**
     * 记住我
     */
    @TableField(exist = false)
    private Boolean rememberMe;

    @TableField(exist = false)
    private String ip;

    /**
     * 重新对盐重新进行了定义，用户名+salt，这样就更加不容易被破解
     * 密码盐.
     */
    @JsonIgnore
    public String getCredentialsSalt(){
        return this.loginName + this.salt;
    }

}
